package com.ywyself.dao;

import java.util.List;

import com.jfinal.kit.Kv;
import com.jfinal.kit.LogKit;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.SqlPara;
import com.ywyself.ext.kit.YsKit;
import com.ywyself.ext.utils.YsDateUtils;
import com.ywyself.model.User;

public class UserDao {
	private static final String TABLE_NAME = "ys_user";

	/**
	 * 基于用户id查找用户
	 * 
	 * @param uid
	 *            用户id
	 * @return
	 */
	public YsKit getById(long uid) {
		try {
			User u = User.dao.findById(uid);
			if (u != null) {
				return YsKit.ok().msg("查询成功").data(u);
			} else {
				return YsKit.fail().msg("没有获取到用户信息");
			}
		} catch (Exception e) {
			LogKit.error("UserDao.getById():" + e.getLocalizedMessage());
			return YsKit.sqlError();
		}
	}

	/**
	 * 根据用户名查找用户
	 * 
	 * @param userName
	 *            用户名
	 * @return data:User
	 */
	public YsKit getByUserName(String userName) {
		try {
			SqlPara sqlPara = Db.getSqlPara("user.findFirst", Kv.by("userName", userName));
			User u = User.dao.findFirst(sqlPara);
			if (u != null) {
				return YsKit.ok().code("100").msg("查找成功").data(u);
			} else {
				return YsKit.fail().code("400").msg("没有查找到数据");
			}
		} catch (Exception e) {
			LogKit.error("UserDao.getByUserName():" + e.getLocalizedMessage());
			return YsKit.sqlError().code("410");
		}
	}

	/**
	 * 查询所有用户
	 * 
	 * @return
	 */
	public List<User> listAll() {
		return User.dao.find("SELECT * FROM " + TABLE_NAME);
	}

	/**
	 * 更新用户信息
	 * 
	 * @param uid
	 *            用户id
	 * @param userName
	 *            用户名
	 * @param userPass
	 *            用户密码
	 * @return
	 */
	public YsKit updateSecurity(long uid, String userName, String userPass) {
		return this.updateColumnsById(uid,
				Kv.by("user_name", userName).set("user_pass", userPass).set("update_time", YsDateUtils.getStr()));
	}

	/**
	 * 更新用户的登录ip和登录时间
	 * 
	 * @param uid
	 *            用户id
	 * @param loginIp
	 *            登录ip
	 * @param loginDate
	 *            登录时间
	 * @return
	 */
	public YsKit updateLog(long uid, String loginIp, String loginDate) {
		return this.updateColumnsById(uid, Kv.by("login_ip", loginIp).set("login_date", loginDate));
	}

	/**
	 * 更新用户的基本信息
	 * 
	 * @param uid
	 *            用户id
	 * @param nickName
	 *            用户昵称
	 * @param icon
	 *            用户头像
	 * @param gender
	 *            性别
	 * @param email
	 *            邮箱
	 * @return
	 */
	public YsKit updateInfo(long uid, String nickName, String icon, String gender, String email) {
		return this.updateColumnsById(uid, Kv.by("nick_name", nickName).set("icon", icon).set("gender", gender)
				.set("email", email).set("update_time", YsDateUtils.getStr()));
	}

	/**
	 * 更新用户表中的数据
	 * 
	 * @param uid
	 *            用户id
	 * @param data
	 *            更新的数据
	 * @return
	 */
	private YsKit updateColumnsById(long uid, Kv data) {
		try {
			SqlPara sqlPara = Db.getSqlPara("user.updateColumnsById", Kv.by("data", data).set("id", uid));
			boolean isOk = Db.update(sqlPara) > 0;
			if (isOk) {
				return YsKit.ok().code("101").msg("更新成功");
			} else {
				return YsKit.fail().code("400").msg("更新失败");
			}
		} catch (Exception e) {
			LogKit.error("UserDao.updateColumnsById():" + e.getLocalizedMessage());
			return YsKit.sqlError().code("410");
		}
	}
}
